import { Router } from 'vue-router';
import type { AppRoutePaths } from 'virtual:generated-pages-type';

/**
 * 类型安全的路由导航
 * 使用这个函数可以获得路径的自动完成和类型检查
 *
 * @param router Vue Router实例
 * @param path 路由路径，带有类型提示
 * @param query 查询参数
 */
export function navigateTo(
  router: Router,
  path: AppRoutePaths,
  query?: Record<string, string | number | boolean>,
): Promise<void> {
  return router.push({
    path,
    query,
  });
}

/**
 * 类型安全的路由替换
 *
 * @param router Vue Router实例
 * @param path 路由路径，带有类型提示
 * @param query 查询参数
 */
export function replaceTo(
  router: Router,
  path: AppRoutePaths,
  query?: Record<string, string | number | boolean>,
): Promise<void> {
  return router.replace({
    path,
    query,
  });
}

/**
 * 检查路径是否有效
 *
 * @param path 要检查的路径
 */
export function isValidPath(path: string): path is AppRoutePaths {
  try {
    // 导入路由映射
    const { routeMap } = require('virtual:generated-pages-type');
    // 检查路径是否在路由映射中
    return Object.values(routeMap).includes(path);
  } catch (error) {
    console.warn('[路由助手] 无法验证路径，可能是路由类型未生成:', error);
    return true; // 默认放行
  }
}

/**
 * 使用示例:
 *
 * import { useRouter } from 'vue-router';
 * import { navigateTo } from '@/utils/router-helper';
 *
 * const router = useRouter();
 *
 * // ✅ 正确 - 存在的路径，有自动完成
 * navigateTo(router, '/dashboard');
 *
 * // ❌ 错误 - 不存在的路径会有类型错误
 * navigateTo(router, '/not-exist-path');
 */
